// 引入插件需要的包
const through = require('through2');

/**
 * 定义gulp插件主函数
 * @param {*} prefix_text 调用插件传入的参数
 * @returns 
 */
module.exports = function gulp_wxml(prefix_text){

    // 创建stream对象，每个文件都会经过这个stream对象
    // file：stream对象接收到的文件数据，该文件类型有三种：
    //     * stream：流数据，可以用file.isStream判断
    //     * buffer：二进制数据，gulp.src读取文件默认就是这个类型，可以用file.isBuffer判断
    //     * null：为空，表示没有数据，可以用file.isNull判断
    // encoding：表示编码方式，一般不用，可以不管callback(error,data)：
    // callback回调函数，执行完代码后都要调用这个函数，告诉stream引擎，我们已经处理完了
    const stream = through.obj(function(file, encoding, callback){
        // 文件经过stream时要执行代码
        if (file.isBuffer()) {
            let code = file.contents.toString();
            const result = code.match(/<wxs(.*?)>[\s\S]*(<\/wxs>)/g);
            code = code.replace(/<wxs(.*?)>[\s\S]*(<\/wxs>)/g, '')
              .replace(/\n+|\t+/g, ' ')
              .replace(/\s+/g, ' ')
              .replace(/(>\s)/g, '>')
              .replace(/(\s<)/g, '<')
              .replace(/<!--[\w\W\r\n]*?-->/g, '');
            if (result) {
              code = result.join('') + '\n' + code;
            }
            // eslint-disable-next-line no-param-reassign
            file.contents = Buffer.from(code);
          }
          callback(null, file);
    });

    // 返回stream对象
    return stream;
};